package com.elephant.leil.generator.mapper;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface TableStructureMapper {

    @Select("select table_name from user_tables where TABLESPACE_NAME is not null and  user=#{userName}")
    List<String> getAllTableNames(@Param("userName") String userName);

    /**
     * 获取表结构及字段注释
     * @param tableName     表名称
     * @return              表结构描述及字段注释
     */
    @Select("select user_tab_columns.column_name,user_tab_columns.data_type,user_col_comments.comments,user_tab_columns.nullable from user_tab_columns inner join user_col_comments on user_tab_columns.column_name=user_col_comments.column_name and user_tab_columns.table_name=user_col_comments.table_name where user_tab_columns.table_name=#{tableName}")
    List<Map<String, String>> selectTableColumns(@Param("tableName") String tableName);

    /**
     * 获取表注释
     * @param tableName     表名称
     * @return              表注释
     */
    @Select("select * from user_tab_comments where table_name=#{tableName}")
    Map<String, String> getTableComment(@Param("tableName") String tableName);

    /**
     * 获取序列当前值（配合插入获取ID）
     * @param seqName       序列名称
     * @return              序列当前值
     */
    @Select("select ${seqName}.CURRVAL from dual")
    Map<String, BigDecimal> getSeqCurrentVal(@Param("seqName") String seqName);


    /**
     * 获取序列当前值（配合插入获取ID）
     * @param seqName       序列名称
     * @return              序列当前值
     */
    @Select("select ${seqName}.NEXTVAL from dual")
    Map<String, BigDecimal> getSeqNextVal(@Param("seqName") String seqName);

}
